<?php
/* 
 * Test de funcionalidades de boletin
 * BD utilizada: ecampus_test (base para ambiente de test)
 * REQUIERE que se carguen los triggers sobre la base
 * 
 */
require_once dirname(__FILE__).'/../bootstrap/unit.php';
$configuracion = ProjectConfiguration::getApplicationConfiguration('frontend', 'test', 'true');
new sfDatabaseManager($configuration);
Doctrine_Core::loadData(sfConfig::get('sf_test_dir').'/fixtures');

$cantidad_pruebas = 13;
$test = new lime_test($cantidad_pruebas);

$materia = new Materia();
    $materia->setIdMateria(10);
$materia->save();

$curso = new Curso();


$docente = new Docente();
    $docente->setNombreUsuario("docente");
    $docente->setEmail("doc@ecampus.com");

$docente->save();

    $curso->setIdDocente( $docente->getIdUsuario() );
    $curso->setIdMateria($materia->getIdMateria());
$curso->save();

$alumno1 = new Alumno();
//    $alumno1->setIdUsuario(20);
    $alumno1->setNombreUsuario("alu");
    $alumno1->setEmail("fa@ecampus.com");
$alumno2 = new Alumno();
//    $alumno2->setIdUsuario(20);
    $alumno2->setNombreUsuario("bgg");
    $alumno2->setEmail("bfg@ecampus.com");
$alumno1->save();
$alumno2->save();

$trimestre = 1;

$alumno1->inscribirEnCurso($curso);
$alumno2->inscribirEnCurso($curso);

/* //Test: calcular promedio de notas del trimestre 1 para alumno1 */
$alumno1->agregarNota($curso, $trimestre, 8);
$alumno1->agregarNota($curso, $trimestre, 9);
$alumno1->agregarNota($curso, $trimestre, 10);


$promedio_alumno1 = $alumno1->calcularPromedioTrimestre($curso, $trimestre, '2010');
$test->is($promedio_alumno1, 9.00,"promedio de alumno1: 9");

/* //testear el promedio del trimestre 1 para el alumno2 */
$alumno2->agregarNota($curso, $trimestre, 4);
$alumno2->agregarNota($curso, $trimestre, 3);
$alumno2->agregarNota($curso, $trimestre, 7.50);
$alumno2->agregarNota($curso, $trimestre, 6.50);
$alumno2->agregarNota($curso, $trimestre, 8);

$promedio_alumno2 = $alumno2->calcularPromedioTrimestre($curso, $trimestre, '2010');
$test->is($promedio_alumno2, 5.80, "Promedio de alumno1 OK");

$alumno1->cerrarTrimestre($curso, $trimestre);
$alumno2->cerrarTrimestre($curso, $trimestre);

/* //test para el segundo trimestre */
$trimestre = 2;

$alumno1->agregarNota($curso, $trimestre, 7.75);
$alumno1->agregarNota($curso, $trimestre, 8);
$alumno1->agregarNota($curso, $trimestre, 9);
$alumno1->agregarNota($curso, $trimestre, 9.50);

$promedio_alumno1 = $alumno1->calcularPromedioTrimestre($curso, $trimestre, '2010');
$test->is($promedio_alumno1, 8.56, "Promedio alumno1 para trimestre 2: OK");

$alumno2->agregarNota($curso, $trimestre, 6);
$alumno2->agregarNota($curso, $trimestre, 5);
$alumno2->agregarNota($curso, $trimestre, 8.75);

$promedio_alumno2 = $alumno2->calcularPromedioTrimestre($curso, $trimestre, '2010');
$test->is($promedio_alumno2, 6.58, "promedio alumno2 trimestre 2 = 6.58 : OK");

/** //test para cerrar el trimestre */
$alumno1->cerrarTrimestre($curso, $trimestre);
$alumno2->cerrarTrimestre($curso, $trimestre);

$boletin_alumno1 = $alumno1->getBoletinCurso($curso, '2010');
$boletin_alumno2 = $alumno2->getBoletinCurso($curso, '2010');


$test->is($boletin_alumno1->getNotaTrimestre1(), 9.00, "consulta de trimestre 1 para alumno1 OK");
$test->is($boletin_alumno1->getNotaTrimestre2(), 8.56 , "consulta de trimestre 2 para alumno1 OK");

$test->is($boletin_alumno2->getNotaTrimestre1(), 5.80, "consulta de trimestre 1 para alumno2 OK");
$test->is($boletin_alumno2->getNotaTrimestre2(), 6.58 , "consulta de trimestre 2 para alumno2 OK");

/* //test para el tercer trimestre */
$trimestre = 3;

$alumno1->agregarNota($curso, $trimestre, 7.50);
$alumno1->agregarNota($curso, $trimestre, 9.75);
$alumno1->agregarNota($curso, $trimestre, 8);

$alumno2->agregarNota($curso, $trimestre, 6);
$alumno2->agregarNota($curso, $trimestre, 7);

$promedio_alumno1 = $alumno1->calcularPromedioTrimestre($curso, $trimestre, '2010');
$promedio_alumno2 = $alumno2->calcularPromedioTrimestre($curso, $trimestre, '2010');

$test->is($promedio_alumno1, 8.42 , "Promedio del trimestre 3 para alumno1 OK");
$test->is($promedio_alumno2, 6.50 , "Promedio del trimestre 3 para alumno2 OK");

/* test cerrar trimestre a nivel curso */
$alumno3 = new Alumno();
//    $alumno1->setIdUsuario(20);
    $alumno3->setNombreUsuario("alu3");
    $alumno3->setEmail("fa3@ecampus.com");
$alumno3->save();
$alumno3->inscribirEnCurso($curso);

$alumno3->agregarNota($curso, $trimestre, 8.25);
$alumno3->agregarNota($curso, $trimestre, 8);
$alumno3->agregarNota($curso, $trimestre, 7);
$alumno3->agregarNota($curso, $trimestre, 7.50);

$anio = '2010';
$curso->cerrarTrimestre($trimestre, $anio);
    /* los siguientes 3 metodos obtienen la nota trimestral una vez que el trimestre ya se cerro */
$promedio_alumno1 = $alumno1->getNotaEnTrimestreCurso($curso->getIdCurso(), $anio, $trimestre);
$promedio_alumno2 = $alumno2->getNotaEnTrimestreCurso($curso->getIdCurso(), $anio, $trimestre);
$promedio_alumno3 = $alumno3->getNotaEnTrimestreCurso($curso->getIdCurso(), $anio, $trimestre);

$test->is($promedio_alumno1, 8.42 , "curso->cerrarTrimestre - Promedio del trimestre 3 para alumno1 OK");
$test->is($promedio_alumno2, 6.50 , "curso->cerrarTrimestre - Promedio del trimestre 3 para alumno2 OK");
$test->is($promedio_alumno3, 7.69 , "curso->cerrarTrimestre - Promedio del trimestre 3 para alumno3 OK");

//dejar la base en las condiciones iniciales
//$alumno1->borrarExamenes();
//$alumno2->borrarExamenes();
//
//$alumno1->borrarBoletinCurso($curso,2010);
//$alumno2->borrarBoletinCurso($curso,2010);
//
//$alumno1->sacarDelCurso($curso);
//$alumno2->sacarDelCurso($curso);
//
//$curso->delete();
//$docente->eliminar();
//$materia->eliminar();
//
//$alumno1->delete();
//$alumno2->delete();
?>
